package com.example.xpvideo.tools;


import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.core.lang.UUID;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;

@Component
public class OssUtils {


    /**
     * Endpoint以北京为例，其它Region请按实际情况填写。
     */

    @Autowired
    private com.example.xpvideo.config.AliOssKey AliOssKey;


    /**
     * 简单上传
     * @param file    需要上传的文件
     * @param catalog 目录
     * @return
     */

    public String uploadFileAvatar(MultipartFile file,
                                   String catalog) {
        OSS ossClient = new OSSClientBuilder().build(AliOssKey.getEndpoint(), AliOssKey.getKeyID(),
                AliOssKey.getKeySecret());
        InputStream inputStream = null;
        try {
            //获取文件流
            inputStream = file.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        String fileName = file.getOriginalFilename();
        String extName = FileNameUtil.extName(fileName);
        String filename;
        filename = UUID.randomUUID()
                .toString() + "." + extName;
        filename = catalog + "/" + filename;
        //调用OSS方法实现上传
        ossClient.putObject(AliOssKey.getBucketName(), filename, inputStream);
        ossClient.shutdown();
        //把上传之后的文件路径返回
        //需要把上传到阿里云oss路径手动拼接出来
        //路径规则：https://edu-cgq.oss-cn-chengdu.aliyuncs.com/QQ%E5%9B%BE%E7%89%8720200502111905.jpg
        return "https://" + AliOssKey.getBucketName() + "." + AliOssKey.getEndpoint()  + "/" + filename;
    }

    /**
     * 删除文件
     * @author hjt
     * @param url
     * @return
     */
    public void delFile(String url){
        String host="https://" + AliOssKey.getBucketName() + "." + AliOssKey.getEndpoint()  + "/";
        String objectName = url.substring(host.length());// 结束host后内容就是我们要删除的内容
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(AliOssKey.getEndpoint(), AliOssKey.getKeyID(), AliOssKey.getKeySecret());
        // 删除文件。如需删除文件夹，请将ObjectName设置为对应的文件夹名称。如果文件夹非空，则需要将文件夹下的所有object删除后才能删除该文件夹。
        ossClient.deleteObject(AliOssKey.getBucketName(), objectName);
        // 关闭OSSClient。
        ossClient.shutdown();
    }
}
